package 最大数;

import java.io.*;
import java.util.*;

public class Main {
    //    第一行有两个正整数 m,p，意义如题目描述；接下来 m行，每一行表示一个操作。
//    如果该行的内容是 Q L，则表示这个操作是询问序列中最后 L个数的最大数是多少；
//    如果是 A t，则表示向序列后面加一个数，加入的数是 (t+a) mod p。其中，t
//    是输入的参数，a 是在这个添加操作之前最后一个询问操作的答案（如果之前没有询问操作，则 a=0）。
    static int N = 200010, n, m, q;
    static long last;

    static PII[] tr = new PII[4 * N];

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
        String[] s = in.readLine().split(" ");
        m = Integer.parseInt(s[0]);
        q = Integer.parseInt(s[1]);
        build(1, 1, m);
        while (m-- > 0) {
            String[] s1 = in.readLine().split(" ");
            int x = Integer.parseInt(s1[1]);
            if (s1[0].equals("Q")) {
                last = query(1, n - x + 1, n);
                out.write(last + "\n");
            } else {
                modify(1, n + 1, (x + (long) last) % q);
                n++;
            }
        }
        out.flush();
    }

    private static void modify(int u, int x, long v) {
        if (tr[u].l == x && tr[u].r == x) {
            tr[u].max = v;
        } else {
            int mid = tr[u].l + tr[u].r >> 1;
            if (x <= mid) {
                modify(u << 1, x, v);
            } else {
                modify(u << 1 | 1, x, v);
            }
            pushup(u);
        }

    }

    private static void pushup(int u) {
        tr[u].max = Math.max(tr[u << 1].max, tr[u << 1 | 1].max);
    }

    private static long query(int u, int l, int r) {
        if (tr[u].l >= l && tr[u].r <= r) {
            return tr[u].max;
        }
        int mid = tr[u].l + tr[u].r >> 1;
        long ret = 0;
        if (l <= mid) {
            ret = Math.max(ret, query(u << 1, l, r));
        }
        if (r >= mid + 1) {
            ret = Math.max(ret, query(u << 1 | 1, l, r));
        }
        return ret;
    }

    private static void build(int u, int l, int r) {
        tr[u] = new PII(l, r);
        if (l == r) {
            return;
        }
        int mid = l + r >> 1;
        build(u << 1, l, mid);
        build(u << 1 | 1, mid + 1, r);
    }
}

class PII {
    int l, r;
    long max;

    public PII(int l, int r, long max) {
        this.l = l;
        this.r = r;
        this.max = max;
    }

    public PII(int l, int r) {
        this.l = l;
        this.r = r;
    }
}